C增加运算问题`````

来源:百度知道 编辑:UC知道 时间:2024/05/18 00:17:42
int i=1;
printf("%d\n",(++i+i+++i)*(++i+i));
为什么结果是54而不是48?
(2+2+2)*(4+5)
最后一个应该是4,为什么是5?

((++i)+(i++)+(i)) * ((++i)+i)
(2+2+2)*(4+5)

我用gcc和vc运行这段程序结果都是36
(++i+i+++i)*(++i+i)相当于
((++i)+i+i))*((++i)+i);//(2+2+2)*(3+3)
i++;

++i是先本身加1
而i++是程序先运行后再加1

应该是这样的步骤:
1)i=1,先做++i,此时i=2;
2)然后i+i=2+2,i++,此时i=3,;
3)再+i=2+2+3;
4)++i,i=4,后半部分为4+4
所以最后为(2+2+3)*(4+4)=56


计算机语言交流群:14940080,欢迎加入

==========================================================================

以下内容引自《C 语言常见问题集》 原著:Steve Summit 翻译:朱群英, 孙 云

http://c-faq-chn.sourceforge.net/ccfaq/index.html

http://www.eskimo.com/~scs/C-faq/top.html

==========================================================================

4.3 对于代码 int i = 3; i = i++; 不同编译器给出不同的结果, 有的为 3, 有的为 4, 哪个是正确的?